package com.happy016.persist.base;

import java.util.List;

/**
 * @author linyb
 * create on  2017/6/19 11:30
 */
public interface IBaseDao<T,K> {

    /**
     * 保存实体，属性为null也会保存为null,不会使用数据库的默认值
     * @author linyb
     * create on  2017/6/19 14:14
     *
     */
    Integer save(T entity);
    /**
     * 保存实体，属性为null使用数据库的默认值
     * @author linyb
     * create on  2017/6/19 14:14
     */
    Integer saveSelective(T entity);
    /**
     * 保存实体，返回主键
     * 属性为null也会保存为null,不会使用数据库的默认值
     * @author linyb
     * create on  2017/6/19 17:13
     */
    Integer saveUseGeneratedKeys(T entity);
    /**
     * 根据id删除
     * @author linyb
     * create on  2017/6/19 14:14
     */
    Integer delete(K id);

    /**
     * 根据实体属性作为条件进行删除，
     * 查询条件使用等号
     * @author linyb
     * create on  2017/6/19 14:56
     */
    Integer deleteByEntity(T entity);
    /**
     * 根据实体修改，实体里面需有id，属性为null也会被更新为null
     * @author linyb
     * create on  2017/6/19 14:14
     */
    Integer update(T entity);
    /**
     * 根据实体修改，实体里面需有id，属性为null不会更新
     * @author linyb
     * create on  2017/6/19 14:14
     */
    Integer updateSelective(T entity);
    /**
     * 根据id获取
     * @author linyb
     * create on  2017/6/19 14:14
     */
    T get(K id);
    /**
     * 查询全部
     * @author linyb
     * create on  2017/6/19 14:14
     */
    List<T> findAll();
    /**
     * 根据实体查询符合条件的记录，
     * 查询条件使用等号
     * @author linyb
     * create on  2017/6/19 14:15
     */
    List<T> findAllByEntity(T entity);
    /**
     * 根据实体查询符合条件的记录，只能用一个返回值，有多个返回值抛出异常
     * 查询条件使用等号
     * @author linyb
     * create on  2017/6/19 14:15
     */
    T findOneByEntity(T entity);
    /**
     * 根据实体查询符合条件的记录数
     * 查询条件使用等号
     * @author linyb
     * create on  2017/6/19 14:17
     */
    Integer findCountByEntity(T entity);
    /**
     * 根据id字符串获取数据
     * @param ids   格式为：1,2,3
     * @author linyb
     * create on  2017/6/19 14:58
     */
    List<T> findByIds(String ids);
    /**
     * 根据id字符串来删除数据
     * @param ids 格式为1,2,3
     * @author linyb
     * create on  2017/6/19 14:59
     */
    Integer deleteByIds(String ids);

    /**
     * 批量插入
     * @author linyb
     * create on  2017/6/19 15:01
     */
    Integer saveList(List<T> entitys);

}
